package com.sf.factory;


import com.sf.factory.abstractFactory.INote;
import com.sf.factory.abstractFactory.IVideo;
import com.sf.factory.abstractFactory.JavaCourseFactory;

/**
 * Hello world!
 *
 */
public class App 
{
    public static void main( String[] args )
    {
        //简单工厂模式
        /**
         * 简单工厂也有它的缺点：工厂类的职责相对过重，不易于扩展过于复杂的产品结构。
         */
//        SimpleFactory simpleFactory = new SimpleFactory();
//        ICourse iCourse = simpleFactory.create(JavaCourse.class);
//        iCourse.record();
        //JDK 用到简单工厂模式的
//        Calendar.getInstance();
        /**
         *  工厂方法模式
         *工厂方法适用于以下场景：
         *      1、创建对象需要大量重复的代码。
         *      2、客户端（应用层）不依赖于产品类实例如何被创建、实现等细节。
         *      3、一个类通过其子类来指定创建哪个对象。
         * 工厂方法也有缺点：
         *      1、类的个数容易过多，增加复杂度。
         *      2、增加了系统的抽象性和理解难度
         */
//        ICourseFactory javaCourseFactory = new JavaCourseFactory();
//        ICourse iCourse = javaCourseFactory.create();
//        iCourse.record();

        /**
         *  抽象工厂
         */
        JavaCourseFactory javaCourseFactory = new JavaCourseFactory();
        IVideo video = javaCourseFactory.createVideo();
        INote note = javaCourseFactory.createNote();
        video.record();
        note.edit();

    }
}
